﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Diagnostics;
using System.IO;

namespace NNImage
{
    public partial class FormGlowny : Form
    {
        private Stream plik = null;
        private Bitmap bitmapa = null;
        private Podglad podglad = null;
        private string[] Metody = { "Winner takes all", "Winner takes most" };
        private string[] FunkcjeAktywacji = { "funkcja1", "funkcja2" };
        public FormGlowny()
        {
            InitializeComponent();
            groupBoxUstawienia.Enabled = false;
            groupBoxInformacje.Enabled = false;
            groupBoxRaport.Enabled = false;
            buttonDekompresja.Enabled = false;
            buttonKompresja.Enabled = false;
            buttonPodglad.Enabled = false;
            buttonZapis.Enabled = false;
            comboBoxMetoda.DataSource = Metody;
            comboBoxFunkcjaAktywacji.DataSource = FunkcjeAktywacji;

        }



        private void kompresjaToolStripMenuItem_Click(object sender, EventArgs e)
        {

            openFileDialogOtworzPlik.Title = "Otwórz plik do kompresji";
            openFileDialogOtworzPlik.InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            openFileDialogOtworzPlik.Filter = "Bitmapy (*.bmp)|*.bmp";
            if (openFileDialogOtworzPlik.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    if ((plik = openFileDialogOtworzPlik.OpenFile()) != null)
                    {

                        try
                        {
                            bitmapa = (Bitmap)Bitmap.FromStream(plik);
                            groupBoxUstawienia.Enabled = true;
                            groupBoxInformacje.Enabled = true;
                            groupBoxRaport.Enabled = false;
                            buttonDekompresja.Enabled = false;
                            buttonKompresja.Enabled = true;
                            buttonPodglad.Enabled = true;
                            buttonZapis.Enabled = false;
                            textBoxNazwaPliku.Text = String.Format("{0}", System.IO.Path.GetFileName(openFileDialogOtworzPlik.FileName));
                            labelSzerokosc2.Text = String.Format("{0} px", bitmapa.Width);
                            labelWysokosc2.Text = String.Format("{0} px", bitmapa.Height);
                            labelRozmiar2.Text = String.Format("{0} b", plik.Length);

                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("Błąd! Niepoprawny format. Kod błędu: " + ex.Message, "Błąd!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }


                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Błąd! Nie można odczytać pliku. Kod błędu: " + ex.Message, "Błąd!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }


        }

        private void dekompresjaToolStripMenuItem_Click(object sender, EventArgs e)
        {

            openFileDialogOtworzPlik.Title = "Otwórz plik do dekompresji";
            openFileDialogOtworzPlik.InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            openFileDialogOtworzPlik.Filter = "Obrazy skompresowane (*.nni)|*.nni";
            if (openFileDialogOtworzPlik.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    if ((plik = openFileDialogOtworzPlik.OpenFile()) != null)
                    {
                        //TODO wychwycenie wyjatku jesli zly format pliku *.nni, trzeba zaprojektowac naglowek pliku
                        if(bitmapa!=null)
                        bitmapa.Dispose();
                        bitmapa = null;
                        groupBoxUstawienia.Enabled = false;
                        groupBoxInformacje.Enabled = true;
                        groupBoxRaport.Enabled = false;
                        buttonDekompresja.Enabled = true;
                        buttonKompresja.Enabled = false;
                        buttonPodglad.Enabled = false;
                        buttonZapis.Enabled = false;
                        textBoxNazwaPliku.Text = String.Format("{0}", System.IO.Path.GetFileName(openFileDialogOtworzPlik.FileName));
                        labelRozmiar2.Text = String.Format("{0} b", plik.Length);





                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Błąd! Nie można odczytać pliku. Kod błędu: " + ex.Message, "Błąd!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

        }

        private void wyjścieToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }

        private void numericUpDownRozmiarRamki_ValueChanged(object sender, EventArgs e)
        {
            labelRozmiarRamki2.Text = String.Format("{0}px x {0}px", numericUpDownRozmiarRamki.Value);
        }

        private void buttonPodglad_Click(object sender, EventArgs e)
        {
            if (podglad == null || podglad.IsDisposed)
            {
                podglad = new Podglad(bitmapa, textBoxNazwaPliku.Text);
                podglad.Show();
            }
        }

        private void buttonKompresja_Click(object sender, EventArgs e)
        {
            //TODO utworzenie nowego watku w tle (backgroundWorker)
            //TODO wywolanie metody tworzacej siec neuronowa i przekazanie do niej bitmapy
            //TODO ustawienie raportu na enabled, buttona zapisz na enabled
            //TODO obsluga progressbara
        }

        private void buttonDekompresja_Click(object sender, EventArgs e)
        {
            //TODO utworzenie nowego watku w tle (backgroundWorker)
            //TODO wywolanie metody dekompresujacej i przekazanie do niej strumienia
            //TODO ustawienie buttona zapisz na enabled
            //TODO obsluga progressbara
        }

        private void buttonZapis_Click(object sender, EventArgs e)
        {
            //TODO w zaleznosci od typu pliku (bmp lub nni) zapis do odpowiedniego formatu
            saveFileDialogZapiszPlik.Title = "Zapisz";
            saveFileDialogZapiszPlik.InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            if (bitmapa != null)
                saveFileDialogZapiszPlik.Filter = "Obrazy skompresowane (*.nni)|*.nni";
            else
                saveFileDialogZapiszPlik.Filter = "Bitmapy (*.bmp)|*.bmp";
            if (saveFileDialogZapiszPlik.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    

                //TODO zapis pliku



               }
                
                catch (Exception ex)
                {
                    MessageBox.Show("Błąd! Nie można zapisać pliku. Kod błędu: " + ex.Message, "Błąd!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

        }
    }
}
